package com.woniu108.product.client;

import com.woniu108.carService.commos.dto.AdminInfoDto;
import com.woniu108.carService.commos.dto.StoreAdminDto;
import com.woniu108.carService.commos.dto.StoreDto;
import com.woniu108.carService.commos.dto.UserInfoDto;
import com.woniu108.carService.commos.model.Result;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @author 谭鹏
 */
@FeignClient(name = "person-server", path = "/person")
public interface PersonClient {
    /**
     * 通过id查管理员信息
     *
     * @param adminId 管理员id
     * @return 管理员信息
     */
    @GetMapping("/adminInfo/getByAdminId/{adminId}.api")
    Result<AdminInfoDto> getByAdminId(@PathVariable("adminId") String adminId);

    /**
     * 根据id查找单个用户
     *
     * @param userId 用户id
     * @return 用户信息
     */
    @GetMapping("/userInfo/getByUserId/{userId}.c")
    Result<UserInfoDto> getByUserId(@PathVariable("userId") String userId);

    /**
     * 根据门店管理员编号获取门店管理员详细信息
     *
     * @param storeAdminId 门店管理员ID
     * @return 门店管理员详细信息 编号、姓名、创建时间、管理门店编号、状态
     */
    @GetMapping("/storeAdmin/getStoreAdminInfoById/{storeAdminId}.c")
    Result<StoreAdminDto> getStoreAdminInfoById(@PathVariable("storeAdminId") String storeAdminId);

    /**
     * 用户积分减少并记录到log
     *
     * @param userId    用户ID
     * @param score     变动积分
     * @param scoreType ***
     * @return newScore变动后积分
     */
    @GetMapping("/userInfo/reduceUserScore.c")
    Result<Integer> reduceUserScore(@RequestParam("userId")String userId, @RequestParam("score")Integer score, @RequestParam("scoreType")Integer scoreType);

    /**
     * 根据门店编号查找门店信息(含门店负责人姓名，多个显示为json字符串形式)
     *
     * @param storeId 门店ID
     * @return StoreDto 门店详细信息
     */
    @GetMapping("/store/getStoreById/{storeId}.c")
    @ApiOperation("根据门店编号查找门店信息")
    @ApiImplicitParam(name = "storeId", value = "门店ID")
    Result<StoreDto> getStoreById(@PathVariable("storeId") Integer storeId);


    /**
     * 添加管理员操作历史记录
     * @param adminId 管理员编号
     * @param methodName 操作功能名称
     * @return result 是否正常访问接口结果
     */
    @GetMapping("/adminHistory/addAdminHistory.api")
    @ApiOperation("添加管理员操作历史记录")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "adminId",value = "管理员编号"),
            @ApiImplicitParam(name = "methodName",value = "操作功能名称")
    })
    public Result addAdminHistory(@RequestParam("adminId") String adminId,@RequestParam("methodName") String methodName);
}
